import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { User } from 'src/user/entities/user.entity';
import { UserService } from 'src/user/user.service';

@Injectable()
/***
 *  AdminGuard 校验登录用户是否是admin角色
 */
export class AdminGuard implements CanActivate {
    constructor(
        private userService: UserService // 注入userService方法
    ){}

    // canActivate 校验通过 返回的逻辑
    async canActivate(
        context: ExecutionContext,
    ):  Promise<boolean>  {
        //  1. 获取请求对象  req的user值 从validate 方法的返回值中取到
        const req = context.switchToHttp().getRequest()
        
        //  2. 获取请求中的用户信息 进行 角色判断
        const user = (await this.userService.findByUsername(req.user.username)) as User
        
        // 3. 判断是否是 admin 的角色  如果不是 那么没有操作权限
        const adminUser = user.roles.filter((r)=> r.id === "65c214be-ef6b-4a4d-80a4-f4ebd515ea69")
        if(adminUser.length > 0){
            return true
        }
        return false;
    }
}
